#include <iostream>

using namespace std;

#include "binary_search_tree.h"

void test1()
{
	violet::binary_search_tree<int> bst;
	bst.insert(1);
	bst.insert(2);
	bst.insert(3);
	bst.insert(4);
	bst.insert(5);

	bst.insert(1);
	bst.insert(7);
	bst.insert(6);
}

void test2()
{
	violet::binary_search_tree<int> bst;
	bst.insert(3);
	bst.insert(1);
	bst.insert(4);
	bst.insert(10);
	bst.insert(7);
	bst.insert(6);
	bst.insert(8);
	bst.insert(9);
	bst.insert(11);

	// 3
	//1  4
	//      10
	//    7    11
	//   6  8
	//        9

	bst.erase(1);
	bst.erase(4);
	bst.erase(10);
	bst.erase(3);
}

void test3()
{
	violet::binary_search_tree<int> bst;
	bst.insert_recursion(5);
	bst.insert_recursion(1);
	bst.insert_recursion(2);
	bst.insert_recursion(3);
	bst.insert_recursion(9);
	bst.insert_recursion(8);
	bst.insert_recursion(7);
	
	//       5
	//   1      9
	//    2    8
	//     3  7
}

void test4()
{
	violet::binary_search_tree<int> bst;
	bst.insert(3);
	bst.insert(1);
	bst.insert(4);
	bst.insert(10);
	bst.insert(7);
	bst.insert(6);
	bst.insert(8);
	bst.insert(9);
	bst.insert(11);

	// 3
	//1  4
	//      10
	//    7    11
	//   6  8
	//        9

	bst.erase_recursion(1);
	bst.erase_recursion(4);
	bst.erase_recursion(10);
	bst.erase_recursion(3);
}

void test5()
{
	violet::binary_search_tree<int> bst;
	bst.insert(5);
	bst.insert(1);
	bst.insert(2);
	bst.insert(6);
	bst.insert(7);

	violet::binary_search_tree<int> bst1(bst);

	violet::binary_search_tree<int> bst2;
	bst2 = bst;
}

int main()
{
	//test1();
	//test2();
	//test3();
	//test4();
	test5();

	return 0;
}